package de.herzog.bbp.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import de.herzog.bbp.view.bean.SpielBean;

@Entity
@Table(name = "SPIELE")
public class Spiel extends AbstractModel implements Serializable {

	private static final long serialVersionUID = 2892011775104460002L;

	private static final String SEP = "_";

	@Id
	@GeneratedValue
	@Column(name = "S_ID")
	private Integer id;

	@ManyToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "K_ID")
	private Klasse klasse;

	@Column(name = "S_NUMMER")
	private Integer nummer;

	@Column(name = "S_DATUM")
	private Date datum;

	@Column(name = "S_ZEIT")
	private String zeit;

	@ManyToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "M_ID_HEIM")
	private Mannschaft heimMannschaft;

	@ManyToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "M_ID_GAST")
	private Mannschaft gastMannschaft;

	@ManyToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "H_ID")
	private Halle halle;

	@Column(name = "S_SCHIRI")
	private String schiri;

	public Spiel() {
		super();
	}

	public Spiel(Spiel spiel) {
		this(spiel.getKlasse(), spiel.getNummer(), spiel.getDatum(), spiel.getZeit(), spiel.getHeimMannschaft(), spiel
				.getGastMannschaft(), spiel.getHalle(), spiel.getSchiri());
	}

	public Spiel(Klasse klasse, Integer nummer, Date datum, String zeit, Mannschaft heimMannschaft,
			Mannschaft gastMannschaft, Halle halle, String schiri) {
		super();
		setKlasse(klasse);
		setNummer(nummer);
		setDatum(datum);
		setZeit(zeit);
		setHeimMannschaft(heimMannschaft);
		setGastMannschaft(gastMannschaft);
		setHalle(halle);
		setSchiri(schiri);
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Klasse getKlasse() {
		return klasse;
	}

	public void setKlasse(Klasse klasse) {
		this.klasse = klasse;
	}

	public Integer getNummer() {
		return nummer;
	}

	public void setNummer(Integer nummer) {
		this.nummer = nummer;
	}

	public Date getDatum() {
		return datum;
	}

	public void setDatum(Date datum) {
		this.datum = datum;
	}

	public String getZeit() {
		return zeit;
	}

	public void setZeit(String zeit) {
		this.zeit = zeit;
	}

	public Mannschaft getHeimMannschaft() {
		return heimMannschaft;
	}

	public void setHeimMannschaft(Mannschaft heimMannschaft) {
		this.heimMannschaft = heimMannschaft;
	}

	public Mannschaft getGastMannschaft() {
		return gastMannschaft;
	}

	public void setGastMannschaft(Mannschaft gastMannschaft) {
		this.gastMannschaft = gastMannschaft;
	}

	public Halle getHalle() {
		return halle;
	}

	public void setHalle(Halle halle) {
		this.halle = halle;
	}

	public String getSchiri() {
		return schiri;
	}

	public void setSchiri(String schiri) {
		this.schiri = schiri;
	}

	public Integer getZeitMinuten() {
		if (getZeit().matches("[0-2][0-9]:[0-5][0-9]")) {
			int stunden = Integer.valueOf(getZeit().substring(0, 2));
			int minuten = Integer.valueOf(getZeit().substring(3, 5));
			return stunden * 60 + minuten;
		} else {
			throw new IllegalArgumentException("Invalid time " + zeit);
		}

	}

	public String toString() {
		StringBuffer b = new StringBuffer();
		b.append(getKlasse()).append(SEP);
		b.append(getNummer()).append(SEP);
		b.append(SpielBean.dateToString(getDatum())).append(SEP);
		b.append(getZeit()).append(SEP);
		b.append(getHeimMannschaft()).append(SEP);
		b.append(getGastMannschaft()).append(SEP);
		b.append(getHalle()).append(SEP);
		b.append(getSchiri());
		return getClass().getSimpleName() + ":" + b.toString();
	}
}
